/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */

// 导入数据库操作模块

const db = require('../db/index')
// 导入bcryptjs（加密密码）
const bcrypt = require('bcryptjs')
// 导入生成token的包
const jwt = require('jsonwebtoken')
// 导入全局的配置文件
const config = require('../config')
// 注册用户的处理函数
exports.regUser = (req, res) => {
    // 获取客户端提交到服务器的用户信息
    const userInfo = req.body
    console.log('userInfo', userInfo)
    // 判断是否为空
    // if (!userInfo.username || !userInfo.password) {
    //     return res.fnErr('用户名和密码不可以为空!')
    // }

    // 定义sql语句,查询用户名是否被占用
    const sqlStr = 'select * from users where username= ?'
    db.query(sqlStr, userInfo.username, (error, results) => {
        // 执行sql语句失败
        if (error) {
            res.fnErr(error)

        }
        // 判断用户名是否被占用
        if (results.length > 0) {
            return res.fnErr('用户名被占用,请更换其他名字')
        } else {
            // 用户名可用,调用bcrypt.hashSync()对密码进行加密
            userInfo.password = bcrypt.hashSync(userInfo.password, 10)
            // 插入新用户
            const sqlStr2 = 'INSERT INTO users(username,password) VALUE (?,?)'
            db.query(sqlStr2, [userInfo.username, userInfo.password], (error, results) => {
                if (error) {
                    // 执行sql语句失败
                    res.fnErr(error)
                }
                if (results.affectedRows !== 1) {
                    res.fnErr('注册用户失败')
                }
                // res.send({ msg: '注册用户成功' })
                res.fnErr('注册用户成功', 0)
            })

        }
    })

}

// 登录的处理函数
exports.login = (req, res) => {
    // 接收表单数据
    const userInfo = req.body
    const sqlStr = 'SELECT * FROM users where username=?'
    // 查询是否存在用户
    db.query(sqlStr, userInfo.username, (error, results) => {
        if (!results.length) {
            return res.fnErr('用户不存在')
        }

        // 判断吗密码是否正确
        if (!bcrypt.compareSync(userInfo.password, results[0].password)) {
            return res.fnErr('密码错误')
        }
        // 用户名和密码都正确
        const userInfoSafe = { ...results[0], password: '', user_pic: '' }
        // 对用户的信息进行加密,生成token字符串
        const tokenStr = jwt.sign(userInfoSafe, config.jwtSelectKey, { expiresIn: '9h' })

        res.send({
            status: 0,
            msg: "登录成功",
            token: "Bearer " + tokenStr
        })

    })



}